package com.ryder.club.gateway.auth;

import cn.dev33.satoken.context.SaHolder;
import cn.dev33.satoken.context.model.SaRequest;
import cn.dev33.satoken.reactor.filter.SaReactorFilter;
import cn.dev33.satoken.router.SaHttpMethod;
import cn.dev33.satoken.router.SaRouter;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

/**
 * 描述: [Sa-Token 权限认证] 配置类
 *
 * @author Ryder
 * @version 1.0
 * @date 2025/02/14
 * @since 1.0 // 版本号，指明从哪个版本开始
 */
@Configuration
public class SaTokenConfigure{

    //     注册 Sa-Token全局过滤器
    @Bean
    public SaReactorFilter getSaReactorFilter() {
        return new SaReactorFilter()
                // 拦截地址
                .addInclude("/**")
                // 鉴权方法：每次访问进入
                .setAuth(obj -> {
                    System.out.println("-------- 前端访问path：" + SaHolder.getRequest().getRequestPath());
                    System.out.println("Gateway 收到的 Token: " + SaHolder.getRequest().getHeader("satoken"));
                    // 登录校验 -- 拦截所有路由，并排除/user/doLogin 用于开放登录
//                    SaRouter.match("/auth/**", "/auth/user/doLogin", r -> StpUtil.checkRole("admin"));
                    SaRouter.match("/oss/**", r -> StpUtil.checkLogin());
                    SaRouter.match("/subject/subject/add", r -> StpUtil.checkPermission("subject:add"));
                    SaRouter.match("/subject/**", r -> StpUtil.checkLogin());
                })
                ;
    }

//    @Bean
//    public SaReactorFilter getSaReactorFilter() {
//        return new SaReactorFilter()
//                // 拦截地址
//                .addInclude("/**")    /* 拦截全部path */
//                // 鉴权方法：每次访问进入
//                .setAuth(obj -> {
//                    System.out.println("-------- 前端访问path：" + SaHolder.getRequest().getRequestPath());
//                    String token = SaHolder.getRequest().getHeader("satoken");
//                    System.out.println("Gateway 收到的 Token: " + token);
//
//                    // 登录校验 -- 拦截所有路由，并排除/user/doLogin 用于开放登录
//                    SaRouter.match("/auth/**")
//                            .notMatch("/auth/user/doLogin") //, "/auth/user/isLogin"
//                            .check(r -> {
//                                System.out.println("11当前登录用户ID: " + StpUtil.getLoginIdDefaultNull());
//                                System.out.println("11用户角色列表：" + StpUtil.getRoleList());
//                                StpUtil.checkRole("admin");
//                                System.out.println("角色校验通过");
//                            });
//                    SaRouter.match("/oss/**", r -> StpUtil.checkLogin());
//                    SaRouter.match("/subject/subject/add", r -> StpUtil.checkPermission("subject:add"));
//                    SaRouter.match("/subject/**", r -> StpUtil.checkLogin());
//                })
//                ;
//    }
}
